package com.xiaoyang.forum.controller;

import cn.hutool.core.util.StrUtil;
import com.xiaoyang.forum.common.code.BaseController;
import com.xiaoyang.forum.common.code.Result;
import com.xiaoyang.forum.common.code.ResultCode;
import com.xiaoyang.forum.domain.dto.ArticleDTO;
import com.xiaoyang.forum.domain.dto.UserUpdateDTO;
import com.xiaoyang.forum.domain.vo.ArticleVO;
import com.xiaoyang.forum.domain.vo.UserVO;
import com.xiaoyang.forum.service.IAdminService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: XiaoYang
 * @CreateTime: 2025-09-22
 * @Description: 后台管理
 */
@Slf4j
@RestController
@RequestMapping("/admin")
public class AdminController extends BaseController {

    @Autowired
    private IAdminService adminService;

    /**
     * 获取普通用户列表
     * @param token
     * @return
     */
    @GetMapping("/user/list")
    public Result<List<UserVO>> userList(@RequestHeader String token) {
        log.info("获取用户列表");
        if (StrUtil.isEmpty(token)) {
            return Result.failed(ResultCode.USER_NO_LOGIN);
        }

        return Result.success(adminService.userList());
    }

    /**
     * 修改用户状态
     * @param userUpdateDTO
     * @param token
     * @return
     */
    @PutMapping("/user/updateStatus")
    public Result<Void> updateUserStatus(@RequestBody UserUpdateDTO userUpdateDTO, @RequestHeader String token) {
        log.info("修改用户状态");
        if (StrUtil.isEmpty(token)) {
            return Result.failed(ResultCode.USER_NO_LOGIN);
        }

        return toR(adminService.updateUserStatus(userUpdateDTO));
    }

    /**
     * 获取文章列表
     * @param token
     * @return
     */
    @GetMapping("/article/list")
    public Result<List<ArticleVO>> articleList(@RequestHeader String token) {
        log.info("获取文章列表");
        if (StrUtil.isEmpty(token)) {
            return Result.failed(ResultCode.USER_NO_LOGIN);
        }

        return Result.success(adminService.articleList());
    }

    /**
     * 审核帖子
     * 0: 待审核 1: 审核通过 全部人可见 2: 仅自己可见
     * @param articleDTO
     * @param token
     * @return
     */
    @PutMapping("/article/updateStatus")
    public Result<Void> updateArticleStatus(@RequestBody ArticleDTO articleDTO, @RequestHeader String token) {
        log.info("修改文章状态");
        if (StrUtil.isEmpty(token)) {
            return Result.failed(ResultCode.USER_NO_LOGIN);
        }

        return toR(adminService.updateArticleStatus(articleDTO));
    }
}
